101a5c
@@ -32,12 +32,14 @@
import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.tiles.TilesApplicationContext;
 import org.apache.tiles.TilesException;
+import org.apache.tiles.awareness.TilesApplicationContextAware;
 import org.apache.tiles.context.AbstractTilesApplicationContextFactory;
 import org.apache.tiles.context.ChainedTilesRequestContextFactory;
 import org.apache.tiles.context.TilesRequestContextFactory;
 import org.apache.tiles.definition.DefinitionsFactory;
 import org.apache.tiles.definition.DefinitionsFactoryException;
 import org.apache.tiles.definition.DefinitionsReader;
+import org.apache.tiles.definition.Refreshable;
 import org.apache.tiles.definition.digester.DigesterDefinitionsReader;
 import org.apache.tiles.evaluator.AttributeEvaluator;
 import org.apache.tiles.evaluator.el.ELAttributeEvaluator;
@@ -55,6 +57,8 @@
import org.apache.tiles.startup.BasicTilesInitializer;
 import org.apache.tiles.startup.TilesInitializer;
 
 import org.springframework.beans.BeanUtils;
+import org.springframework.beans.BeanWrapper;
+import org.springframework.beans.PropertyAccessorFactory;
 import org.springframework.beans.factory.DisposableBean;
 import org.springframework.beans.factory.InitializingBean;
 import org.springframework.util.ClassUtils;
@@ -435,7 +439,22 @@
public class TilesConfigurer implements ServletContextAware, InitializingBean, D
 		protected DefinitionsFactory createDefinitionsFactory(TilesApplicationContext applicationContext,
 				TilesRequestContextFactory contextFactory, LocaleResolver resolver) {
 			if (definitionsFactoryClass != null) {
-				return BeanUtils.instantiate(definitionsFactoryClass);
+				DefinitionsFactory factory = BeanUtils.instantiate(definitionsFactoryClass);
+				if (factory instanceof TilesApplicationContextAware) {
+					((TilesApplicationContextAware) factory).setApplicationContext(applicationContext);
+				}
+				BeanWrapper bw = PropertyAccessorFactory.forBeanPropertyAccess(factory);
+				if (bw.isWritableProperty("localeResolver")) {
+					bw.setPropertyValue("localeResolver", resolver);
+				}
+				if (bw.isWritableProperty("definitionDAO")) {
+					bw.setPropertyValue("definitionDAO",
+							createLocaleDefinitionDao(applicationContext, contextFactory, resolver));
+				}
+				if (factory instanceof Refreshable) {
+					((Refreshable) factory).refresh();
+				}
+				return factory;
 			}
 			else {
 				return super.createDefinitionsFactory(applicationContext, contextFactory, resolver);
